//
//  YZXStatus.swift
//  YZXWeibo
//
//  Created by 叶周翔 on 16/7/23.
//  Copyright © 2016年 叶周翔. All rights reserved.
//

import UIKit

class YZXStatus: NSObject {
    
    // 微博模型属性
    var id: Int64 = 0
    
    /// 微博的创建时间
    var created_at:String?
    
    /// 微博信息内容
    var text:String?
    
    /// 微博来源
    var source:String?{
        didSet{
            // 原来的来源的:<a href=\"http://weibo.com/\" rel=\"nofollow\">微博 weibo.com</a>
            // 需要得到的字符串 ：微博 weibo.com
            if source?.characters.count > 0 {
                let sourceString = source! as NSString
                let firstRange = sourceString.rangeOfString(">")
                let secondRange = sourceString.rangeOfString("</")
                let range = NSRange(location: firstRange.location + 1, length: secondRange.location - firstRange.location-1)
                let newSource = sourceString.substringWithRange(range)
                source = "来自 \(newSource)"
            }else{
                source = "来自威猛的小老虎"
            }
        }
    }
    
    
    
    /// 转发数
    var reposts_count:Int = 0
    
    /// 微博配图
    var pic_urls:[[String: AnyObject]]?{
        
        didSet{
            if pic_urls?.count == 0{
                return
            }
            // 创建一个保存url的数组
            storePictureURLs = [NSURL]()
            for dict in pic_urls!{
                let urlString = dict["thumbnail_pic"] as? String
                let url = NSURL(string:urlString!)
                storePictureURLs?.append(url!)
            }
        }
    }
    
    /// 直接存放图片的URL
    var storePictureURLs:[NSURL]?
    
    
    /// 评论数
    var comments_count:Int = 0
    
    /// 表态数
    var attitudes_count: Int = 0
    
    /// 用户
    var user:YZXUser?
    
    /// 被转发的微博的模型  不一定有
    var retweeted_status: YZXStatus?
    
    
    /// 被转发微博的文字内容
    var retweetString:String?
    
    /// 计算行高
    var rowHeight: CGFloat = 0
    
    
    /**
      计算每一个cell的行高
     */
    private func cacluRowHeight() {
        // 行高 = cell顶部的高度8 头像距离顶部的高度8 头像的高度35 文字顶部的高度8 文字的高度？ 文字底部8
        // 原创配图 = 配图高度 配图的底部8
        // 被转发的微博 被转发的文字？ 配图的高度 被转发文字的底部8
        // 被转发微博的配图 = 配图的高度？ 配图底部的高度8
        // 底部按钮的高度
        
        var height = CellMargin + CellMargin + CellIconWH + CellMargin
        
        // 计算文字的高度
        if let nsText = self.text{
            // 转换成OC的字符串
            let textString = nsText as NSString
            let att = [NSFontAttributeName:UIFont.systemFontOfSize(contentFont)]
            
            height += textString.boundingRectWithSize(CGSize(width: screenWidth - 2 * CellMargin, height: CGFloat(MAXFLOAT)), options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: att, context: nil).height
        }
        height += CellMargin
        
        
        // 原创配图的高度
        let count = storePictureURLs?.count
        if count > 0 {
            height += caclPictureSize(storePictureURLs).height
            // 配图底部的高度
            height += CellMargin
        }
        
        // 被转发微博的文字
        if let retweeted_status = self.retweeted_status {
            // 有被转发的微博
            height += CellMargin
            
            // 被转发微博的文字
            let nsRetweetText = retweeted_status.retweetString! as NSString
            
            height += nsRetweetText.boundingRectWithSize(CGSize(width: screenWidth - 2 * CellMargin, height: CGFloat(MAXFLOAT)), options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: [NSFontAttributeName : UIFont.systemFontOfSize(reweetFont)], context: nil).height
            
            height += CellMargin
            
            // 被转发微博的配图
            let retweetCount = retweeted_status.storePictureURLs?.count ?? 0
            if retweetCount > 0 {
                height += self.caclPictureSize(retweeted_status.storePictureURLs).height
                height += CellMargin
            }
        }
        
        // 最底部按钮的高度
        height += CGFloat(bottomHeight)
        self.rowHeight = height
//        print("\(self.rowHeight)")
    }
    
    
 /// 计算配图的高度
    private func caclPictureSize(imageURLs: [NSURL]?) -> CGSize {
        // 获取图片的数量
        let count = imageURLs?.count ?? 0
        /// 总列数 默认3列
        var numberOfColumn = maxNum
        if count == 1 {
            numberOfColumn = 1
        } else if count == 2 || count == 4 {
            numberOfColumn = 2
        }
        
        
        if count == 0{
            return CGSizeZero
        }
        
        // 计算宽度 = 总列数*图片宽度+（总列数-1）*图片间距
        let width = CGFloat(numberOfColumn) * picureWH + CGFloat((maxNum-1)) * itemPadding
        // 计算总行数
        let numRow = (count+numberOfColumn-1) / numberOfColumn
        
        // 计算高度 = 总行数 * 图片高度 + （总行数-1）*图片的间距
        let height = CGFloat(numRow) * picureWH + CGFloat((maxNum-1)) * itemPadding
        return CGSize(width: width, height: height)
        
    }
    
    
    init(dic:[String: AnyObject]){
        super.init()
        // KVC
        setValuesForKeysWithDictionary(dic)
        // 模型有值了计算行高
        self.cacluRowHeight()
    }
    
    override func setValue(value: AnyObject?, forKey key: String) {
        if key == "user" {
            if let dic = value as? [String: AnyObject]{
                
                user = YZXUser(dict: dic)
            }
            return
        }
        
        if key == "retweeted_status" {
            
            if let dict = value as? [String: AnyObject]{
                retweeted_status = YZXStatus(dic: dict)
                let name = retweeted_status?.user?.screen_name ?? "没有名称"
                
                let text = retweeted_status?.text ?? "没有微博内容"
                let content = "@\(name):\(text)"
                retweeted_status!.retweetString = content
            }
            
            return 
        }
        
        super.setValue(value, forKey: key)
    }
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {}
}